package BackEnd;

import BackEnd.Exceptions.NotExistRegisterException;
import java.util.Date;
import Dao.*;
import java.sql.Time;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
 *
 * @author emmanuel
 */
public class MensajePrivado {
    private Usuario remitente;
    private Usuario destinatario;
    private Date fechaEnvio;
    private Time hora;
    private String mensaje;
    private boolean estado;
    private long id;

    public MensajePrivado() {
    }

    public MensajePrivado(Usuario remitente, Usuario destinatario, Date fechaEnvio, String mensaje, boolean estado) {
        this.remitente = remitente;
        this.destinatario = destinatario;
        this.fechaEnvio = fechaEnvio;
        this.mensaje = mensaje;
        this.estado = estado;
        id=0;
    }

    /**
     * @return the remitente
     */
    public Usuario getRemitente() {
        return remitente;
    }

    /**
     * @param remitente the remitente to set
     */
    public void setRemitente(Usuario remitente) {
        this.remitente = remitente;
    }

    /**
     * @return the destinatario
     */
    public Usuario getDestinatario() {
        return destinatario;
    }

    /**
     * @param destinatario the destinatario to set
     */
    public void setDestinatario(Usuario destinatario) {
        this.destinatario = destinatario;
    }

    /**
     * @return the fechaEnvio
     */
    public Date getFechaEnvio() {
        return fechaEnvio;
    }

    /**
     * @param fechaEnvio the fechaEnvio to set
     */
    public void setFechaEnvio(Date fechaEnvio) {
        this.fechaEnvio = fechaEnvio;
    }

    /**
     * @return the mensaje
     */
    public String getMensaje() {
        return mensaje;
    }

    /**
     * @param mensaje the mensaje to set
     */
    public void setMensaje(String mensaje) {
        this.mensaje = mensaje;
    }

    /**
     * @return the estado
     */
    public boolean getEstado() {
        return estado;
    }

    /**
     * @param estado the estado to set
     */
    public void setEstado(boolean estado) {
        this.estado = estado;
    }

    /**
     * @return the id
     */
    public long getId() {
        return id;
    }

    /**
     * @param id the id to set
     */
    public void setId(long id) {
        this.id = id;
    }

    public boolean abrir(long id){
        try {
            MensajePrivadoValueObject mpvo = (MensajePrivadoValueObject) new MensajePrivadoDao().traer(new PkId((int)getId()));

            Usuario dest=new Usuario();
            dest.abrir(mpvo.getIdUsuarioDestino());
            this.setDestinatario(dest);

            this.setEstado(mpvo.getEstadoMensaje());
            this.setFechaEnvio(mpvo.getFecha());
            this.setHora(mpvo.getHora());
            this.setId(mpvo.getId());
            this.setMensaje(mpvo.getMensaje());

            Usuario rem=new Usuario();
            rem.abrir(mpvo.getIdUsuarioOrigen());
            this.setRemitente(rem);


        } catch (NotExistRegisterException ex) {
            Logger.getLogger(MensajePrivado.class.getName()).log(Level.SEVERE, null, ex);
            return false;
        }
       return true;
    }

    public void grabar() {
        MensajePrivadoValueObject mpvo=new MensajePrivadoValueObject();
        mpvo.setEstadoMensaje(estado);
        mpvo.setFecha(fechaEnvio);
        mpvo.setHora(hora);
        mpvo.setId((int)id);
        mpvo.setIdUsuarioDestino((int)destinatario.getId());
        mpvo.setIdUsuarioOrigen((int)remitente.getId());
        mpvo.setMensaje(mensaje);

        try {
            try {
                new MensajePrivadoDao().traer(new PkId((int)id));
                } catch (NotExistRegisterException ex){
                    new MensajePrivadoDao().create(mpvo);
                }

             new MensajePrivadoDao().update(mpvo);
            } catch (Exception ex1) {Logger.getLogger(Post.class.getName()).log(Level.SEVERE, null, ex1);}

    }

    /**
     * @return the hora
     */
    public Time getHora() {
        return hora;
    }

    /**
     * @param hora the hora to set
     */
    public void setHora(Time hora) {
        this.hora = hora;
    }

}
